{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# $$偏差和方差$$\n",
    "## 在本练习中，将实现正则化的线性回归和多项式回归，并使用它来研究具有不同偏差-方差属性的模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1、Regularized Linear Regression 正则线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.io import loadmat\n",
    "import scipy.optimize as opt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据可视化\n",
    "ex5data1.mat数据集分为了三个部分：\n",
    "* training set 训练集：训练模型\n",
    "* cross validation set 交叉验证集：选择正则化参数\n",
    "* test set 测试集：评估性能，模型训练中不曾用过的样本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X=(12, 2),y=(12, 1)\n",
      "Xval=(21, 2),yval=(21, 1)\n",
      "Xtest=(21, 2),ytest=(21, 1)\n"
     ]
    }
   ],
   "source": [
    "path = 'ex5data1.mat'\n",
    "data = loadmat(path)\n",
    "#Training set\n",
    "X, y = data['X'], data['y']\n",
    "#Cross validation set\n",
    "Xval, yval = data['Xval'], data['yval']\n",
    "#Test set\n",
    "Xtest, ytest = data['Xtest'], data['ytest']\n",
    "#Insert a column of 1's to all of the X's, as usual\n",
    "X = np.insert(X    ,0,1,axis=1)\n",
    "Xval = np.insert(Xval ,0,1,axis=1)\n",
    "Xtest = np.insert(Xtest,0,1,axis=1)\n",
    "print('X={},y={}'.format(X.shape, y.shape))\n",
    "print('Xval={},yval={}'.format(Xval.shape, yval.shape))\n",
    "print('Xtest={},ytest={}'.format(Xtest.shape, ytest.shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plotData():\n",
    "    \"\"\"瞧一瞧数据长啥样,其中包含水位变化的历史记录，x，以及从大坝流出的水量，y\"\"\"\n",
    "    plt.figure(figsize=(8,5))\n",
    "    plt.scatter(X[:,1:], y, c='b', marker='x')\n",
    "    plt.xlabel('Change in water level (x)')\n",
    "    plt.ylabel('Water flowing out of the dam (y)')\n",
    "    plt.grid(True)\n",
    "    \n",
    "plotData()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Regularized linear regression cost function（正则化线性回归代价函数）\n",
    "$$J(\\theta)={\\frac{1}{2m}}{\\sum\\limits_{i=1} ^m (h_{\\theta}(x^{(i)})-y^{(i)})^2}+{\\frac{\\lambda}{2m}}{\\sum\\limits_{j=1} ^n ({\\theta}_j ^2)}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#初始化theta=[1,1]，lambda=1\n",
    "def costReg(theta, X, y, l):\n",
    "    cost = ((X @ theta - y.flatten()) ** 2).sum()\n",
    "    regterm = l * (theta[1:] @ theta[1:])\n",
    "    return (cost + regterm) / (2 * len(X))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "303.9931922202643\n"
     ]
    }
   ],
   "source": [
    "theta = np.ones(X.shape[1])\n",
    "print(costReg(theta, X, y, 1))  # 303.9931922202643"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 正则线性回归梯度\n",
    "![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMTAyMzI2Mi1hMTUzNWJjYzY1N2M0MDBhLnBuZw)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-15.30301567 598.25074417]\n"
     ]
    }
   ],
   "source": [
    "def gradientReg(theta, X, y, l):\n",
    "    \"\"\"\n",
    "    theta: 1-d array with shape (2,)\n",
    "    X: 2-d array with shape (12, 2)\n",
    "    y: 2-d array with shape (12, 1)\n",
    "    l: lambda constant\n",
    "    grad has same shape as theta (2,)\n",
    "    \"\"\"\n",
    "    grad = (X @ theta - y.flatten()) @ X\n",
    "    regterm = l * theta\n",
    "    regterm[0] = 0  # #don't regulate bias term\n",
    "    return (grad + regterm) / len(X)\n",
    "\n",
    "# Using theta initialized at [1; 1] you should expect to see a \n",
    "# gradient of [-15.303016; 598.250744] (with lambda=1)\n",
    "print(gradientReg(theta, X, y, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fitting linear regression 拟合线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def trainLinearReg(X, y, l):\n",
    "    theta = np.zeros(X.shape[1])\n",
    "    res = opt.minimize(fun=costReg, \n",
    "                       x0=theta, \n",
    "                       args=(X, y ,l), \n",
    "                       method='TNC', \n",
    "                       jac=gradientReg)\n",
    "    return res.x\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x27feffecb48>]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fit_theta = trainLinearReg(X, y, 0)\n",
    "plotData()\n",
    "plt.plot(X[:,1], X @ fit_theta)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里$\\lambda= 0$，因为我们现在实现的线性回归只有两个参数，这么低的维度，正则化并没有用。\n",
    "\n",
    "从图中可以看到，拟合最好的这条直线并不适合这个模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Bias-variance（偏差-方差）\n",
    "机器学习中一个重要的概念是偏差（bias）和方差（variance）的权衡。高偏差意味着欠拟合，高方差意味着过拟合。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Learning curves 学习曲线\n",
    "![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMTAyMzI2Mi1jNTMyYmEyMDc3Y2NhN2M2LnBuZw)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练样本X从1开始逐渐增加，训练出不同的参数向量θ。接着通过交叉验证样本Xval计算验证误差。\n",
    "\n",
    "1、使用训练集的子集来训练模型，得到不同的theta。\n",
    "\n",
    "2、通过theta计算训练代价函数和交叉验证代价函数，切记此时不要使用正则化，将 λ=0。\n",
    "\n",
    "3、计算交叉验证代价函数时记得整个交叉验证集来计算，无需分为子集。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_learning_curve(X, y, Xval, yval, l):\n",
    "    \"\"\"画出学习曲线，即交叉验证误差和训练误差随样本数量的变化而产生的变化\"\"\"\n",
    "    xx = range(1, len(X) + 1)  # at least has one example \n",
    "    training_cost, cv_cost = [], []\n",
    "    for i in xx:\n",
    "        res = trainLinearReg(X[:i], y[:i], l)\n",
    "        training_cost_i = costReg(res, X[:i], y[:i], 0)\n",
    "        cv_cost_i = costReg(res, Xval, yval, 0)\n",
    "        training_cost.append(training_cost_i)\n",
    "        cv_cost.append(cv_cost_i)\n",
    "        \n",
    "    plt.figure(figsize=(8,5))\n",
    "    plt.plot(xx, training_cost, label='training cost')  \n",
    "    plt.plot(xx, cv_cost, label='cv cost') \n",
    "    plt.legend()\n",
    "    plt.xlabel('Number of training examples')\n",
    "    plt.ylabel('Error')\n",
    "    plt.title('Learning curve for linear regression')\n",
    "    plt.grid(True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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YsUKN27cuNb5uXPnur59+7rly5e3Ltu8ebNzzrldu3a5cePGuU2bNjnnnBs5cqTbuHGjW7FihQuHw+7dd991zjl37rnnuj//+c/OOecuvPBC9+CDD7aWv/lm7+/+7373O3fxxRc755y79NJL3S9+8QvnnHNPPfWUA9zGjRvbxLlhwwZXWlraGldLTJdddpm77rrrnHPOPfbYY66iosI559zs2bPdK6+84pxzbvv27a6hocHNnTvXnXHGGe3WRazPApjnYuRE/WytxcAyGDIRFj8Kx3w36GhERNLCvz72AYvX1MZc19TURDgc7vI+xw4r4NrPjevSNtOmTWvz862bb76Zhx9+GIDPPvuMjz76iEGDBrXZZtSoUUyaNAmAww8/nJUrV8bc9znnnNNa5u9//zsAr7zySuv+Z82axcCBA/fZ7o033uCEE05ojauoqKh124ceegiA6dOns3nzZmpqajj22GP53ve+x5e//GXOOeccSktLu1QHnVGXe6Sxc6D6LahdG3QkIiISIfKNZVVVVTz33HO8/vrrvP/++0yePDnmz7tyc3Nbp8PhMI2NjTH33VIusozXEO6Ycy7mneixtjUzrr76av74xz9SV1fHUUcd1dq9nyhJa6Gb2QjgbmAI0Azc5pz7jZkVAfcDZcBK4J+cc1v9ba4BLgaagMudc08nK76YyufACz+HpY/DtG+k9NAiIumoo5Z0sh4s079/f7Zv397u+pqaGgYOHEjfvn1ZunQpb7zxRsJjOO6443jggQf48Y9/zDPPPMPWrVv3KXP00Udz6aWXsmLFCkaNGsWWLVsoKirihBNO4J577uGnP/0pL7/8MsXFxRQUFPDJJ58wYcIEJkyYwOuvv87SpUsZMWJEh+faFclsoTcC33fOlQNHAZea2VjgauB559xo4Hl/Hn/d+cA4YBZwi5l1vS9nfwweA8VjYPEjKT2siIjsNWjQII499ljGjx/PD3/4w33Wz5o1i8bGRiZOnMhPf/pTjjrqqITHcO211/LMM88wZcoUnnrqKYYOHbrPl5fBgwdz2223cc4551BRUcF5550HwHXXXce8efOYOHEi1157LXfddRcAN910E+PHj6eiooI+ffpw2mmnMXHiRLKysqioqOg5N8UBjwAnA8uAof6yocAyf/oa4JqI8k8DR3e0z4TeFNfi+X9z7roBzu3YlPh9d1Nv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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curve(X, y, Xval, yval, 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上图中可以看出来，随着样本数量的增加，训练误差和交叉验证误差都很高，这属于高偏差，欠拟合。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Polynomial regression 多项式回归\n",
    "线性模型对于数据来说太简单了，导致了欠拟合(高偏差)。在这一部分的练习中，使用多项式回归，假设函数形式如下：\n",
    "![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMTAyMzI2Mi0wMDQ4OTMyOTg3YmJhZjA2LnBuZw)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1、数据预处理\n",
    "- X，Xcv，Xtest都需要添加多项式特征，这里我们选择增加到6次方，因为若选8次方无法达到作业pdf上的效果图，这是因为scipy和octave版本的优化算法不同。\n",
    "- 数据标准化（特征缩放）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def genPolyFeatures(X, power):\n",
    "    \"\"\"添加多项式特征\n",
    "    每次在array的最后一列插入第二列的i+2次方（第一列为偏置）\n",
    "    从二次方开始开始插入（因为本身含有一列一次方）\n",
    "    \"\"\"\n",
    "    Xpoly = X.copy()\n",
    "    for i in range(2, power + 1):\n",
    "        Xpoly = np.insert(Xpoly, Xpoly.shape[1], np.power(Xpoly[:,1], i), axis=1)\n",
    "    return Xpoly\n",
    "\n",
    "def get_means_std(X):\n",
    "    \"\"\"获取训练集的均值和误差，用来标准化所有数据。\"\"\"\n",
    "    means = np.mean(X,axis=0)\n",
    "    stds = np.std(X,axis=0,ddof=1)  # ddof=1 means 样本标准差\n",
    "    return means, stds\n",
    "\n",
    "def featureNormalize(myX, means, stds):\n",
    "    \"\"\"标准化\"\"\"\n",
    "    X_norm = myX.copy()\n",
    "    X_norm[:,1:] = X_norm[:,1:] - means[1:]\n",
    "    X_norm[:,1:] = X_norm[:,1:] / stds[1:]\n",
    "    return X_norm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "关于归一化，所有数据集应该都用训练集的均值和样本标准差处理。切记。所以要将训练集的均值和样本标准差存储起来，对后面的数据进行处理。\n",
    "\n",
    "而且注意这里是样本标准差而不是总体标准差，使用np.std()时，将ddof=1则是样本标准差，默认=0是总体标准差。而pandas默认计算样本标准差。\n",
    "\n",
    "获取添加多项式特征以及 标准化之后的数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "power = 6  # 扩展到x的6次方\n",
    "\n",
    "train_means, train_stds = get_means_std(genPolyFeatures(X,power))\n",
    "X_norm = featureNormalize(genPolyFeatures(X,power), train_means, train_stds)\n",
    "Xval_norm = featureNormalize(genPolyFeatures(Xval,power), train_means, train_stds)\n",
    "Xtest_norm = featureNormalize(genPolyFeatures(Xtest,power), train_means, train_stds)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_fit(means, stds, l):\n",
    "    \"\"\"画出拟合曲线\"\"\"\n",
    "    theta = trainLinearReg(X_norm,y, l)\n",
    "    x = np.linspace(-75,55,50)\n",
    "    xmat = x.reshape(-1, 1)\n",
    "    xmat = np.insert(xmat,0,1,axis=1)\n",
    "    Xmat = genPolyFeatures(xmat, power)\n",
    "    Xmat_norm = featureNormalize(Xmat, means, stds)\n",
    "    \n",
    "    plotData()\n",
    "    plt.plot(x, Xmat_norm@theta,'r--')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAFNCAYAAAD2E503AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deZxU1Z3//9enF2ig2Rrokk1ARaUbWVsUcWnENXFETVRMNJpFsjiJyS8a8eskGCdmnIljzEyiM7hrXOPENe5KuyuCorIKKEoL0ux0s3f3+f1xbtNFUU0X0FW3lvfz8Siq6t5z7/3UqaY/fc4991xzziEiIiKZLS/sAERERGT/KaGLiIhkASV0ERGRLKCELiIikgWU0EVERLKAErqIiEgWUEIXiWFmx5nZwrDjSCUz+7GZrTSzOjPr0Qb7W2pmJwWv/5+Z3b7/UeYeMzsw+E7yw45F0p/pOnRJJ2a2FPiBc+6lsGPJFWZWCGwEjnbOfdhG+1yKvkeRlFILXXJONrR22vgzRIAiYO4+xGFmlpa/R1qro7aO3cwK2mpfIvsiLf8jisQyszwzm2JmS8xsjZk9YmYlUev/ZmZfmdkGM3vNzMqj1t1tZrea2TNmtgkYH3QJX2FmHwXbPGxmRUH5SjOrjtq+xbLB+l+Z2QozW25mPzAzZ2aHtPA5SszsrqDsOjN7PFh+iZm9EVN2537ifIarg8+bH1X+bDP7KJH6itrmUKDp9MJ6M3slWH6Mmb0XfN73zOyYqG2qzOx6M3sT2Awc1Mp3d62Z/TV4PTD4XBeb2RdmttrMrokq26bfc5xYdovdzA43sxfNbK2ZLTSz86LK9zCzp8xsY1APv4v+noLPcpmZLQIWBcvOMLPZZrbezN4ys2FR5a8ysy/NrDY41oRg+RgzmxkcZ6WZ3RRTXwXB+z5m9mQQ62IzuzSmnh8xs3uD/c81s4o9fTeSZZxzeuiRNg9gKXBSnOU/B94B+gHtgf8FHoxa/z2gc7DuZmB21Lq7gQ3AOPwfsUXBcWYAfYASYD7wo6B8JVAdE1NLZU8DvgLKgY7AfYADDmnh8/0DeBjoDhQCJwTLLwHeiCm7cz8tfIYlwMlR5f8GTEmkvmKOMzA4VkHwvgRYB1wEFAAXBO97BOurgC+Cz1wAFO7pewSuBf4ac6zbgA7AcGAbMCQZ33OcuGJj7wosA74bvB8FrAbKg/IPBY+OQFlQ9o2Y7+jFoM46BNvXAEcB+cDFQV20Bw4Ltu8TVRcHB6/fBi4KXhfjT3/E+25eBW4Jvv8RwCpgQlQ9bwW+Fhz734B3wv4/rUfqHqEHoIce0Q9aTujzm35xBe97AzuaftHFlO0W/BLsGry/G7g3znEujHr/H8D/BK8r2T2ht1T2TuDfotYdQgsJPYi5EegeZ90ltJ7QYz/D74A7g9edgU3AgH2or9ikcREwI6bM28Alwesq4LpEv0fiJ/R+UWVnAJOS8T3H2WaX2IHzgddjyvwvMBWfFHcAh8XUeWxCPzHq/a3Av8bsbyFwQvCzUQOcRMwfQcBrwG+Bni19N0B/oAHoHLX+34C7o+r5pah1ZcCWZP+f1SN9Hupyl0wxAHgs6MZcj//F3wBEzCzfzG4Iumk34pMJQM+o7ZfF2edXUa8341tGLWmpbJ+Yfcc7TpP+wFrn3Lo9lNmT2H0/AJxjZu2Bc4D3nXOfB+tarK8EjtMH+Dxm2edA3z3Esrdaqs9kfM+xossMAI5qOl5wzG8DBwC98Im0te83dn+/jNlff3yrfDG+B+JaoMbMHjKzPsF23wcOBRYEXftnxDlOH/zPT23UstjvJbZei0zn9nOGErpkimXA6c65blGPIufcl8C3gIn4lk9XfKsGwKK2T9blHCvw3cNN+u+h7DKgxMy6xVm3Cd+tC4CZHRCnzC6fwTk3D/8L/XR8HTwQc6yW6qs1y/GJKdqBQPS2yarPVHzP0WWWAa/GHK/YOfdjfHd2Pa1/v7H7uz5mfx2dcw8COOcecM4di69fB/x7sHyRc+4CoDRY9qiZdYo5znL8z0/nqGWx34vkMCV0SUeFZlYU9SgA/ge43swGAJhZLzObGJTvjD8PuwafFH+fwlgfAb5rZkPMrCPwm5YKOudWAM8Ct5hZdzMrNLPjg9UfAuVmNsL8gLtrEzz+A8DPgOPx59Cb7Km+WvMMcKiZfcvMCszsfHz37dMJbr8/Uv09P43/rBcF30ehmR1pZkOccw3A34FrzayjmR0OfKeV/d0G/MjMjjKvk5l93cw6m9lhZnZi0KOyFdiC733AzC40s17OuUZgfbCvhugdO+eWAW8B/xb8vxiGb9nf3wb1IFlACV3S0TP4X3ZNj2uBPwFPAi+YWS1+4NRRQfl78S3VL4F5wbqUcM49C/wXMB1YjD/XDD7xxHMR/rzsAvz51J8H+/kEuA54CT9a+o0Wto/1IP6c/yvOudVRy/dUX619pjXAGcAv8cnzV8AZMftPlpR+z0H39SnAJHwL+Ct8C7l9UOSf8b0BX+EHPD5Iy98tzrmZwKXAn/EDCRfjx0cQ7PMG/KC7r/Ct8f8XrDsNmGtmdfg6mOSc2xrnEBfgeyaWA48BU51zL+7dp5ZspYllRNqQmQ0B5gDtnXP1YccjbcvM/h04wDl3cdixiMRSC11kP5m//rudmXXHt+6eUjLPDsE16sOC7vMx+C7ux8KOSyQeJXSR/fdD/ACqJfjznj8ONxxpQ53x59E34cdL/CfwRKgRibRAXe4iIiJZQC10ERGRLKCELiIikgUyegahnj17uoEDB4YdRtJt2rSJTp1i55iQaKqjxKieEqN6SozqqXXJqKNZs2atds71il2e0Ql94MCBzJw5M+wwkq6qqorKysqww0hrqqPEqJ4So3pKjOqpdcmoIzOLnZoZUJe7iIhIVlBCFxERyQJK6CIiIlkgo8+hi4hI29uxYwfV1dVs3RpvOvlmXbt2Zf78+SmKKjPtTx0VFRXRr18/CgsLEyqvhC4iIruorq6mc+fODBw4EDNrsVxtbS2dO3ducb3sex0551izZg3V1dUMGjQooW3U5S4iIrvYunUrPXr02GMyl+QyM3r06NFqL0k0JXQREdmNknn49vY7UEIXEZG0sn79em655ZZ92vZrX/sa69ev32OZ3/zmN7z00kv7tP+2tnTpUh544IE22VfSErqZ3WlmNWY2J2b5T81soZnNNbP/iFp+tZktDtadmqy4REQkve0poTc0NOxx22eeeYZu3brtscx1113HSSedtM/xtaWMSOjA3cBp0QvMbDwwERjmnCsHbgyWlwGTgPJgm1vMLD+Jse1u60aYeSd88Ff46BGY+xgs+AcsehGWTIelb8Ky92D5bFg5D1YvhnWfw8YVsGmN337HFmjc8w+biIjs2ZQpU1iyZAkjRozgyiuvpKqqivHjx/Otb32LI444AoCzzjqL0aNHU15ezrRp03ZuO3DgQFavXs3SpUsZMmQIl156KeXl5Zxyyils2bIFgEsuuYRHH310Z/mpU6cyatQojjjiCBYsWADAqlWrOPnkkxk1ahQ//OEPGTBgAKtXr94t1ueee45Ro0YxfPhwJkyYAMDatWs566yzGDZsGCeeeCIfffQRAK+++iojRoxgxIgRjBw5ktraWqZMmcLrr7/OiBEj+OMf/7hf9Za0Ue7OudfMbGDM4h8DNzjntgVlaoLlE4GHguWfmdliYAzwdrLi282mVfD0L9pmX5YH+e2CR2HMczvIK4izPvZ1UKaoG3muom3iEhHJADfccANz5sxh9uzZgJ8+dcaMGcyZM2fniO8777yTkpIStmzZwpFHHsk3vvENevTosct+Fi1axIMPPshtt93Geeedx//93/9x4YUX7na8nj178v7773PLLbdw4403cvvtt/Pb3/6WE088kauvvprnnntulz8amqxatYpLL72U1157jUGDBrF27VoApk6dysiRI3n88cd5+umn+c53vsPs2bO58cYb+ctf/sK4ceOoq6ujqKiIG264gRtvvJGnn356v+st1ZetHQocZ2bXA1uBK5xz7wF9gXeiylUHy3ZjZpOByQCRSISqqqo2CcwaGygcexfm6slrrI963hHzfk/PO/awvKF5WUM9edt2YG7rHveZ17idgobNdDz451RVtW+Tz5mt6urq2uxnIZupnhKT6/XUtWtXamtrAfj3F5awYGVd3HLOuX0aPHd4pJirTjm4xfV1dXU0NjbujGHz5s2MHj2anj177lz2hz/8YWcSXLZsGbNnz2bMmDE456irq6Ouro4BAwZw8MEHU1tby9ChQ1m4cCG1tbXs2LGDLVu2UFtbi3OOU045hdraWg4//HD+9re/UVtby2uvvcb9999PbW0t48aNo1u3btTV1dG+ffPv4unTpzN27NidcRUWFu7c9r777qO2tpZjjz2W1atXU11dTUVFBZdffjnnnXceZ555Jn379mXz5s3U19fv/Fyxtm7dmvDPYqoTegHQHTgaOBJ4xMwOAuL9RLh4O3DOTQOmAVRUVLisvjHA9s3w+z70aFhJRTZ/zjagm0QkRvWUmFyvp/nz5++8drqwXSH5+fHPgDY0NLS4bk8K2xXu8drs4uJi8vLydpbp2LEjXbp02fm+qqqK119/nXfffZeOHTtSWVlJfn4+nTt3xswoLi4GoEOHDrvso66ujs6dO1NYWLhzXdPlYZ07d6ZLly4453bZT9P2se/BT/zSrl273T5LdNna2lrMjC5dujB16lTOOeccnnnmGU466SReeuklOnbsSEFBQYv1UVRUxMiR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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_fit(train_means, train_stds, 0)\n",
    "plot_learning_curve(X_norm, y, Xval_norm, yval, 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 调整正则化参数\n",
    "上图可以看到 λ = 0时，训练误差太小了，明显过拟合了。\n",
    "继续调整λ = 1 时："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_fit(train_means, train_stds, 1)\n",
    "plot_learning_curve(X_norm, y, Xval_norm, yval, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 继续调整λ= 100 时，很明显惩罚过多，欠拟合了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAFNCAYAAAD2E503AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3iT59X48e+xvDe2wQYM2AwzPFgOIyybhGAIWTR7vCFNQ5uQ2aYNad++STPa9Nc2q1klo9mQ3SQECNBgNiQhJNjsDTaYYbDBNt73749HgDA2NmBJtnQ+16VL0rN0dEv20T2e+xFjDEoppZRq3XzcHYBSSimlzp8mdKWUUsoDaEJXSimlPIAmdKWUUsoDaEJXSimlPIAmdKWUUsoDaEJXqg4RGSEiG90dhyuJyJ0isk9ESkQkuhmOt0NELrY//r2IvHb+UXofEels/0xs7o5FtXyi56GrlkREdgC/MMbMd3cs3kJE/IAjwBBjzE/NdMwd6OeolEtpDV15HU+o7TTze4gFAoG15xCHiEiL/D/SWBk1d+wi4ttcx1LqXLTIP0Sl6hIRHxGZKiJbRaRQRD4UkSiH9R+JSIGIFIvIIhFJdlj3poi8LCKzRKQUyLQ3CT8oImvs+3wgIoH27TNEJM9h/wa3ta//nYjsFZE9IvILETEi0r2B9xElIv+2b3tYRP5jXz5JRJbU2fbEcep5Dw/b36/NYfurRGRNU8rLYZ8k4Hj3QpGIfGNffqGIfGd/v9+JyIUO+2SLyJMishQoA7o28tk9KiLv2h8n2N/XrSKyS0QOisgfHLZt1s+5nlhOi11EeonIPBE5JCIbReRah+2jReRLETliL4cnHD8n+3uZIiKbgc32ZRNE5EcRKRKRZSKS5rD9QyKSLyJH7a91kX35IBH53v46+0Tk6Trl5Wt/3kFEvrDHukVE7qhTzh+KyNv2468VkfQzfTbKwxhj9Ka3FnMDdgAX17P8fmAFEA8EAP8Cpjus/zkQZl/3LPCjw7o3gWJgGNaP2ED763wLdACigPXAr+zbZwB5dWJqaNssoABIBoKBdwADdG/g/X0FfAC0AfyAUfblk4AldbY9cZwG3sNWYIzD9h8BU5tSXnVeJ8H+Wr7251HAYeAWwBe4wf482r4+G9hlf8++gN+ZPkfgUeDdOq/1KhAE9AUqgN7O+Jzriatu7BHAbuA2+/MBwEEg2b79DPstGOhj33ZJnc9onr3Mguz77wcGAzbgVntZBAA97ft3cCiLbvbHy4Fb7I9Dsbo/6vtsFgIv2T//fsAB4CKHci4Hxttf+y/ACnf/TevNdTe3B6A3vTneaDihrz/+j8v+vD1QdfwfXZ1tI+3/BCPsz98E3q7ndW52eP7/gFfsjzM4PaE3tO0bwF8c1nWngYRuj7kWaFPPukk0ntDrvocngDfsj8OAUqDLOZRX3aRxC/BtnW2WA5Psj7OBx5r6OVJ/Qo932PZb4HpnfM717HNK7MB1wOI62/wLeAQrKVYBPeuUed2EPtrh+cvA43WOtxEYZf9u7Acups6PIGAR8CcgpqHPBugE1ABhDuv/ArzpUM7zHdb1AY45+29Wby3npk3uqrXoAnxmb8YswvrHXwPEiohNRJ6yN9MewUomADEO+++u55gFDo/LsGpGDWlo2w51jl3f6xzXCThkjDl8hm3OpO6x3wcmikgAMBH4wRiz076uwfJqwut0AHbWWbYT6HiGWM5WQ+XpjM+5LsdtugCDj7+e/TVvAuKAtliJtLHPt+7xflPneJ2wauVbsFogHgX2i8gMEelg3+92IAnYYG/an1DP63TA+v4cdVhW93OpW66Bon37XkMTumotdgPjjDGRDrdAY0w+cCNwBVbNJwKrVgMgDvs763SOvVjNw8d1OsO2u4EoEYmsZ10pVrMuACISV882p7wHY8w6rH/o47DK4P06r9VQeTVmD1ZictQZcNzXWeXpis/ZcZvdwMI6rxdqjLkTqzm7msY/37rHe7LO8YKNMdMBjDHvG2OGY5WvAf5qX77ZGHMD0M6+7GMRCanzOnuwvj9hDsvqfi7Ki2lCVy2Rn4gEOtx8gVeAJ0WkC4CItBWRK+zbh2H1wxZiJcU/uzDWD4HbRKS3iAQD/9fQhsaYvcBs4CURaSMifiIy0r76JyBZRPqJNeDu0Sa+/vvAvcBIrD70485UXo2ZBSSJyI0i4isi12E1385s4v7nw9Wf80ys93qL/fPwE5ELRKS3MaYG+BR4VESCRaQX8D+NHO9V4FciMlgsISJyqYiEiUhPERltb1EpB45htT4gIjeLSFtjTC1QZD9WjeOBjTG7gWXAX+x/F2lYNfv3mqEclAfQhK5aollY/+yO3x4FngO+AOaKyFGsgVOD7du/jVVTzQfW2de5hDFmNvA8sADYgtXXDFbiqc8tWP2yG7D6U++3H2cT8BgwH2u09JIG9q9rOlaf/zfGmIMOy89UXo29p0JgAvAbrOT5O2BCneM7i0s/Z3vz9SXA9Vg14AKsGnKAfZO7sVoDCrAGPE6n4c8WY8z3wB3AC1gDCbdgjY/AfsynsAbdFWDVxn9vX5cFrBWREqwyuN4YU17PS9yA1TKxB/gMeMQYM+/s3rXyVDqxjFLNSER6A7lAgDGm2t3xqOYlIn8F4owxt7o7FqXq0hq6UudJrPO//UWkDVbt7ktN5p7Bfo56mr35fBBWE/dn7o5LqfpoQlfq/P0SawDVVqx+zzvdG45qRmFY/eilWOMl/gF87taIlGqANrkrpZRSHkBr6EoppZQH0ISulFJKeYBWPYNQTEyMSUhIcHcYTldaWkpISN05JpQjLaOm0XJqGi2nptFyapwzymjVqlUHjTFt6y5v1Qk9ISGB77//3t1hOF12djYZGRnuDqNF0zJqGi2nptFyahotp8Y5o4xEpO7UzIA2uSullFIeQRO6Ukop5QE0oSullFIeoFX3oSullGp+VVVV5OXlUV5e33TyJ0VERLB+/XoXRdU6nU8ZBQYGEh8fj5+fX5O214SulFLqFHl5eYSFhZGQkICINLjd0aNHCQsLa3C9OvcyMsZQWFhIXl4eiYmJTdpHm9yVUkqdory8nOjo6DMmc+VcIkJ0dHSjrSSONKErpZQ6jSZz9zvbz0ATulJKqRalqKiIl1566Zz2HT9+PEVFRWfc5v/+7/+YP3/+OR2/ue3YsYP333+/WY6lCV0ppVSLcqaEXlNTc8Z9Z82aRWRk5Bm3eeyxx7j44ovPOb7mpAndG9TWwr61sO5zMGf+AiullCeZOnUqW7dupV+/fvz2t78lOzubzMxMbrzxRlJTUwG48sorGThwIMnJyUybNu3EvgkJCRw8eJAdO3bQu3dv7rjjDpKTk7nkkks4duwYAJMmTeLjjz8+sf0jjzzCgAEDSE1NZcOGDQAcOHCAMWPGMGDAAH75y1/SpUsXDh48eFqsc+bMYcCAAfTt25eLLroIgEOHDnHllVeSlpbG6NGjWbNmDQALFy6kX79+9OvXj/79+3P06FGmTp3K4sWL6devH88888z5FZwxptXeBg4caDxGTbUx+auNWfaCMdNvNOapLsY8Em7MI+Em94Mn3B1di7dgwQJ3h9AqaDk1jbeX07p165q03ZEjR5zy+tu3bzfJycknni9YsMAEBwebbdu2nVhWWFhojDGmrKzMJCcnm4MHDxpjjOnSpYs5cOCA2b59u7HZbGb16tXGGGOuueYa88477xhjjLn11lvNRx99dGL7559/3hhjzIsvvmhuv/12Y4wxU6ZMMX/+85+NMcbMnj3bAObAgQOnxLl//34THx9/Iq7jMd19993m0UcfNcYY8+WXX5q+ffsaY4yZMGGCWbJkiTHGmKNHj5qqqiqzYMECc+mllzZYFvV9FsD3pp6cqKetuUtNFez9CXYuhR1LYdcKqCi21rVJgJ7jocswmPsHogu/c2uoSinv9acv17Juz5F619XU1GCz2c76mH06hPPIZclntc+gQYNOOX3r+eef57PPPgNg9+7dbN68mejo6FP2SUxMpF+/fgAMHDiQHTt21HvsiRMnntjm008/BWDJkiUnjp+VlUWbNm1O22/FihWMHDnyRFxRUVEn9v3kk08AGDVqFIWFhRQXFzNs2DB+/etfc9NNNzFx4kTi4+PPqgwaowndVaorYc8PsGOJlcR3rYSqUmtddA9IvhIShkOXCyHC4UPelk3UhjlQWwM+Z/+Ho5RSnsDximXZ2dnMnz+f5cuXExwcTEZGRr2ndwUEBJx4bLPZTjS5N7SdzWajuroasFqvG2OMqXcken37ighTp07l0ksvZdasWQwZMqTZB+ZpQneWqmOQ9729Br4E8r6DavsXrm1v6HeDVQPvMgzCYhs+TtJY/HM+hPxV0GmQa2JXSim7M9WknTWxTFhYGEePHm1wfXFxMW3atCE4OJgNGzawYsWKZo9h+PDhfPjhhzz00EPMnTuXw4cPn7bN0KFDmTJlCtu3bycxMZFDhw4RFRXFyJEjee+99/jjH//I4sWLiYmJITw8nK1bt5KamkpqairLly9nw4YNdOrU6Yzv9Ww4LaGLyBvABGC/MSalzroHgb8BbY0xB+3LHgZuB2qAe40xXzsrNqeoLIXdK63m853LIP97qKkEBOJSYOBtkDAMOl8IIdGNHu6E7hdh8EE2zdGErpTyCtHR0QwbNoyUlBTGjRvHpZdeesr6rKwsXnnlFdLS0ujZsydDhgxp9hgeeeQRbrjhBj744ANGjRpF+/btT/vx0rZtW6ZNm8bEiROpra2lXbt2zJs3j0cffZTbbruNtLQ0AgICeOuttwB49tlnWbBgATabjT59+jBu3Dh8fHzw9fWlb9++TJo0iQceeOCcY5amNCuc04FFRgIlwNuOCV1EOgGvAb2AgcaYgyLSB5gODAI6APOBJGPOPLw7PT3duO166OVHrH7vnUut257VUFsNYoP2fa3k3WU4dB4MQaf3vZyNomeGERkI3Lm0eWL3QHpd5qbRcmoaby+n9evX07t370a38+SpXysqKrDZbPj6+rJ8+XLuvPNOfvzxx7M+zvmWUX2fhYisMsak193WaTV0Y8wiEUmoZ9UzwO+Azx2WXQHMMMZUANtFZAtWcl/urPjOWtmhkwl8xxIoWAOmFnz8oOMAuPCekwk8oHm/4AdjLiBy67+haDdEdmrWYyullDrdrl27uPbaa6mtrcXf359XX33V3SE1yqV96CJyOZBvjPmpzkCCjoBjJ0iefVl9x5gMTAaIjY0lOzvbKbH6VRYTUbyWyKJcIovWElK6E8FQK34cCU+iqPPVFEWmcCS8F7U2+8CLfKy+7mZmgvrQHdj01Qvs6Tiu2Y/vCUpKSpz2XfAkWk5N4+3lFBER0aR+3Zqammbr/21p4uLiWLRo0SnLzuW9nm8ZlZeXN/m76LKELiLBwB+AS+pbXc+yevsCjDHTgGlgNbk3W7NYxVHY9LW9CX0ZHLAmF8A3yOq7TrgJugzDp+NAIv0COfM8RM0re4GBqK4ksY0kL24GPBNvbyJtKi2npvH2clq/fn2Tmok9ucm9uZxvGQUGBtK/f/8mbevKGno3IBE4XjuPB34QkUFYNXLHtuR4YI8LY4PSA/DJ7eAfCp2HQNp11mlk7fuBr79LQzmNCCRlwXevW4Pv/EMa30cppZRXcVlCN8bkAO2OPxeRHUC6fVDcF8D7IvI01qC4HsC3rooNgDaJMDkbYlPB1gLP5ksaCytegm0Lodd4d0ejlFKqhXHaXO4iMh1rUFtPEckTkdsb2tYYsxb4EFgHzAGmNDbCvdmJQIf+LTOZg3W6m38YbJrj7kiUUkq1QE5L6MaYG4wx7Y0xfsaYeGPM63XWJxw/B93+/EljTDdjTE9jzGxnxdVq+fpD99FWP7+TTjVUSillnS9eVlbm7jDOml5trTVJyoKSAmsOeKWUUk6hCV05X/cxgFi1dKWU8mBvv/02aWlp9O3bl1tuuYXi4mISEhKora0FoKysjE6dOlFVVXXKfvv27eOqq66ib9++9O3bl2XLlgHw9NNPk5KSQkpKCs8++ywApaWlXHrppfTt25eUlBQ++OADnn/+efbs2UNmZiaZmZmufdPnqYV2GKt6hbaF+HSrHz3jIXdHo5RSTrF27VqefPJJli5dSkxMDIcOHSIiIoK+ffuycOFCMjMz+fLLLxk7dix+fn6n7HvvvfcyatQoPvvsM2pqaigpKWHVqlX8+9//ZuXKlRhjGDx4MKNGjWLbtm106NCBr776CrDmiI+IiODpp59mwYIFxMTEuOPtnzNN6K1N0lj45gk4uu/MF3VRSqnmMHsqFOTUuyqopvrcBhLHpcK4pxpc/c0333D11VefSKjHL0t63XXX8cEHH5CZmcmMGTO466676t337bffBqyrp0VERLBkyRKuuuqqE1dsmzhxIosXLyYrK4sHH3yQhx56iAkTJjBixIizfy8tiDa5tzZJWdb95rnujUMppZykocuSXn755cyePZtDhw6xatUqRo8e3eTj1ScpKYlVq1aRmprKww8/zGOPPXZecbub1tBbm9gUCO9oNbsPuMXd0SilPN0ZatLHnDRT3EUXXcRVV13FAw88QHR09InLkoaGhjJo0CDuu+8+JkyYgM1mq3ffl19+mfvvv5+amhpKS0sZOXIkkyZNYurUqRhj+Oyzz3jnnXfYs2cPUVFR3HzzzYSGhvLmm28CJy/fqk3uyrlErGb3nz6A6grwDXB3REop1aySk5P5wx/+wKhRo7DZbPTv3/9Esr3uuuu45pprGpzf/LnnnmPy5Mm8/vrr2Gw2Xn75ZYYOHcqkSZMYNMi6BPUvfvEL+vfvz9dff81vf/tbfHx88PPz4+WXXwZg8uTJjBs3jvbt27NgwQJXvOVm4bTLp7qCWy+f6kKnzSu9aS68fw3c/Cl0v8htcbUk3j73dlNpOTWNt5eTXj61+bjy8qnah94aJY6wLhqjp68ppZSy04TeGvkFQdcMqx+9FbewKKWUaj6a0FurpLFQtBMObHR3JEoppVoATeitVdJY636TTnuvlGp+rXl8lac4289AE3prFd4B4tK0H10p1ewCAwMpLCzUpO5GxhgKCwsJDAxs8j562lprlpQFi/8OZYcgOMrd0SilPER8fDx5eXkcOHDgjNuVl5efVcLxRudTRoGBgcTHxzd5e03orVlSFiz6f7BlPqRd6+5olFIews/Pj8TExEa3y87Opn///i6IqPVyZRlpk3tr1qE/hLS1RrsrpZTyaprQWzMfH+gx1qqh11Q1vr1SSimPpQm9tUsaC+XFsHuluyNRSinlRprQW7tumeDjp83uSinl5TSht3YBYZAwXE9fU0opL6cJ3RMkZcHBTVC41d2RKKWUchNN6J7g+Kxxm+e6Nw6llFJuowndE0QlQtte2o+ulFJeTBO6p0gaCzuWQvkRd0ficjl5xXy1rZLyqhp3h6KUUm6jCd1TJGVBbRVsW+DuSFymptbw4oItXPXSUj7aVMXVryxj96Eyd4ellFJu4bSELiJviMh+Ecl1WPY3EdkgImtE5DMRiXRY97CIbBGRjSIy1llxeaz4QRAYCRu9o9k9v+gYN7y6gr99vZGxyXH8Ki2AnYVlTPjnEhZs3O/u8JRSyuWcWUN/E8iqs2wekGKMSQM2AQ8DiEgf4Hog2b7PSyJic2JsnsfmCz3GWAPjaj276fmLn/aQ9ewi1uYX8/dr+vLCjf0Z0sGXmfcMp0NkED9/8zuem7+Z2lq9UpRSyns4LaEbYxYBh+osm2uMqbY/XQEcv4zMFcAMY0yFMWY7sAUY5KzYPFZSFpQdhPwf3B2JUxwtr+LXH/zIvdNX071dKLPuG8HVA+MREQC6RIfw6Z0XclW/jjwzfxO3v/UdxWU6Ja5Syju4sw/958Bs++OOwG6HdXn2ZepsdBsNYvPI0e6rdh5i/POL+c+P+dx3UQ8++uVQukSHnLZdkL+Nf1zbl8evTGHJloNMeGExufnFbohYKaVcS5x5AXsRSQBmGmNS6iz/A5AOTDTGGBF5EVhujHnXvv51YJYx5pN6jjkZmAwQGxs7cMaMGU6Lv6UoKSkhNDS0Sdv2W/17fKvL+P6CZ50clWvU1Bq+2FrFF1uriAkSJqcF0KPN6b0x9ZXRlqIaXlxdQUmV4dZkf4Z39HNV2C3W2XyXvJmWU9NoOTXOGWWUmZm5yhiTXne5y6+HLiK3AhOAi8zJXxN5QCeHzeKBPfXtb4yZBkwDSE9PNxkZGc4LtoXIzs6mye/T7zqY939k9O8OEfGNb9+C7Sws5f4PfmT1rjImDujIny5PJiyw/qRcXxllAFdeXMG901fzWk4hZcFxPHJZHwJ8vXd4xll9l7yYllPTaDk1zpVl5NImdxHJAh4CLjfGOJ5f9AVwvYgEiEgi0AP41pWxeYwk+zjEVjy3uzGGj1flMf65xWzZX8I/b+jP09f2azCZn0lMaABv/3wQd2Z04/2Vu7j2leXkFx1zQtRKKeVezjxtbTqwHOgpInkicjvwAhAGzBORH0XkFQBjzFrgQ2AdMAeYYozx7KHazhKTBG0SWm1CLy6r4u73V/PgRz+R0jGCOfeP5LK+Hc7rmL42Hx7K6sUrNw9k64FSLvvnEpZsPthMESulVMvgtCZ3Y8wN9Sx+/QzbPwk86ax4vIaIVUtf9SZUloF/sLsjarJlWw/ymw9/4sDRCn6X1ZNfjuyGzUea7fhZKXEkxYbyq3dX8T9vrOQ3l/TkzlHd8GnG11BKKXfRmeI8UdJYqC6H7YvcHUmTVFbX8tTsDdz02kqC/Gx8eteF3JXRvVmT+XFd24by2V3DuDStA3/7eiO/fHcVR8r11DalVOunCd0TdRkO/qGt4vS1LftLmPjyUl5ZuJXrL+jMzHuHkxYf2fiO5yEkwJfnr+/HI5f1YcGG/Vz+zyVsKPC+OfCVUp5FE7on8vW3zknf9DU48bTE82GM4b2VO5nwz8XkHz7Gv24ZyF8mphLs75oTL0SE24YlMmPyEMoqa7jqxWX8Z3W+S15bKaWcQRO6p0rKgqN7oCDH3ZGcprCkgjveXsUfPsvlgoQo5tw/krHJcW6JJT0hipn3Dic1PoL7P/iRRz7PpbK61i2xKKXU+dCE7ql6jAGkxY12X7jpAFnPLWbRpgP8cUIf3rptELHhgW6NqV1YIO/9YjC/GJ7IW8t3cv205RQUl7s1JqWUOlua0D1VaDvoOBA2zW58Wxcor6rhT1+u5dY3vqVNsB+f3z2M24cntpgR5n42H/53Qh9euLE/GwqOMuGfi1m+tdDdYSmlVJNpQvdkSVmQvwpK3Hs50Q0FR7jihaX8e+kOJl2YwBd3D6d3+3C3xtSQCWkd+HzKMCKC/Lj59ZW8umgbzpweWSmlmosmdE+WZL+s/Oa5bnn52lrDG0u2c/kLSyksreTft13Ao5cnE+jXsqde7REbxud3D2dscixPzlrPlPd/oKSiuvEdlVLKjTShe7K4VAjr4JbT1/YfKWfSm9/x2Mx1jOwRw5z7R5DZs53L4zhXoQG+vHjjAP4wvjdfr93HFS8sYcv+o+4OSymlGqQJ3ZOJWLX0rQugusJlLztv3T6ynlvMt9sLeeLKFF79n3RiQgNc9vrNRUS4Y2RX3r19MMXHqrj8haXMXFPvNYOUUsrtNKF7uqQsqCyBnUud/lJlldX8/rMc7nj7e9pHBDLznuHcPKQLIi1j4Nu5Gtotmpn3jKBXXBh3v7+aJ2auo6pGT21TSrUsmtA9XeJI8A10+ulrOXnFTPjnEqZ/u4tfjurKZ3cNo3u7MKe+pivFRQQyY/JQJl2YwGtLtnPTayvZf1RPbVNKtRya0D2dfzAkjoKNs50ya1xNreHl7K1c9dJSyipqeO/2wTw8rjf+vp731fL39eHRy5N57vp+1g+Y55fw/Y5D7g5LKaUATejeIWksFO2Eg5ua9bB7io5x02sr+OucDVySHMuc+0dwYfeYZn2NluiKfh35bMqFBPvbuH7aCt5Ysl1PbVNKuZ0mdG9w/PS1Zhzt/tWavWQ9u4g1ecX87eo0XrxxAJHB/s12/JauV1w4X9wznMxe7Xhs5jrunfEjpXpqm1LKjTShe4OIeOsUtmboR6+oruHBj35iyvs/0LVtKLPuHcE16Z1a/cC3cxEe6Me/bh7Ib8f25Ks1e7jqpaVsO1Di7rCUUl5KE7q3SMqCXSug7Pz6fD9fvYePV+UxJbMbH/1qKAkxIc0UYOvk4yNMyezO2z8fzMGSSi5/YSlzcgvcHZZSygtpQvcWSVlgamDrN+d1mB/ziggL9OXBS3riZ9Ovz3HDe8Qw857hdGsXyq/eXcVTszdQrae2KaVcSP8je4sOAyA45rz70XPyikntGOGVTeyN6RAZxIe/HMJNgzvzysKt/OzlZby5dDt5h8vcHZpSygtoQvcWPj7W4LjN86Dm3AZvVVbXsrHgKKkdI5o5OM8R4GvjyatSefravpRW1vDol+sY/tcFjHtuMU/P3UhOXrGOiFdKOYWvuwNQLpQ0Fn58D3avhIRhZ737pn1HqaypJTVeE3pjJg6IZ+KAeLYfLGX+un3MW7ePFxZs4flvthAXHsjFfdpxce9YhnaLJsC3ZV+sRinVOmhC9yZdM8HHz2p2P4eEviavGEBr6GchMSaEO0Z25Y6RXTlUWsmCDfuZt24fn/6Qz7srdhHib2NUz7aM6RNLZs92XnXqn1KqeWlC9yaB4VYi3/Q1XPL4We+ek19MeKAvnaOCnRCc54sK8ednA+P52cB4yqtqWL61kHnr9zF/3T5m5RRg8xEuSGjDxb1juaRPHJ2jtZyVUk2nCd3bJGXBnKlwaBtEdT2rXXPyi0iN1wFxzSHQz0Zmr3Zk9mrHE1ekkJNfzLx1+5i/fh9PfLWeJ75aT1JsKGP6xHJx71j6xkfi46PlrpRqmCZ0b5M01krom+bCkF81ebeK6ho2Fhzl58MTnRicd/LxEfp2iqRvp0geHNuTXYVlzF9v9bu/snAbLy7YStuwAC7ubfW7D+seQ6Cf9rsrpU7ltIQuIm8AE4D9xpgU+7Io4AMgAdgBXGuMOWxf9zBwO1AD3GuMce7lwbxVVFeISbL60c8ioW8qKKGqxpDWMdKJwSmAztHB/L0NDaIAACAASURBVHx4Ij8fnkhxWRULNu5n3vp9fPnTXqZ/u5sgPxsjesQwpk8so3u1I7oVXmteKdX8nFlDfxN4AXjbYdlU4L/GmKdEZKr9+UMi0ge4HkgGOgDzRSTJGFPjxPi8V9JYWPEKVByFgKZd4nRNfhGgA+JcLSLYjyv7d+TK/h2pqK5h5bZDJ5rm567bh4/AwC5Wv/uYPrF0bRvq7pCVUm7itPPQjTGLgLrzjF4BvGV//BZwpcPyGcaYCmPMdmALMMhZsXm9pCyorYKtC5q8S25+MRFBfnSKCnJiYOpMAnxtjExqy+NXprBs6mhm3jOce0b3oLSihr/M3sDofyxk9D+y+cvs9Xy/4xA1tXq+u1LexNV96LHGmL0Axpi9ItLOvrwjsMJhuzz7MuUMnQZDYIQ12r3P5U3aJSdfZ4hrSUSElI4RpHSM4IExSeQXHWO+veb++uLt/GvhNqJD/Bndqx1j+sQyokdbgvy1310pT9ZSBsXVlyXqrV6IyGRgMkBsbCzZ2dlODKtlKCkpafb32Tu8L23WfsmyiJ+BnLmhpqrWsH5PGWMT/FpseTujjFqbLsDt3eCGzkHkHKxh9f5qZv6Ux0er8vDzgeRoGwOjqzELFugPs0bo96lptJwa58oycnVC3yci7e218/bAfvvyPKCTw3bxwJ76DmCMmQZMA0hPTzcZGRlODLdlyM7OptnfZ9QB+PQXZPSIgPiBZ9x0TV4RNXOXcunQVDLS2jdvHM3EKWXUio2331fV1PLtdqvffd66fby+oYYdhPLkVanERQS6NcaWTL9PTaPl1DhXlpGr53L/ArjV/vhW4HOH5deLSICIJAI9gG9dHJt36X6RVTNvwsVacvKtGeLSdMrXVsfP5sOw7jE8enkyi36XyQ29/Fm69SBjnlnIh9/t1nnllfIgTkvoIjIdWA70FJE8EbkdeAoYIyKbgTH25xhj1gIfAuuAOcAUHeHuZMFR0GlI0xJ6njUgLr6NDohrzWw+wtgEP+bcN5I+7cP53Sdr+J83vtWrwSnlIZw5yv0GY0x7Y4yfMSbeGPO6MabQGHORMaaH/f6Qw/ZPGmO6GWN6GmNmOysu5SBpLBSsgSP19m6ckJNfTJrOEOcxEmJCmH7HEB6/MoUfdh5m7DOLeGf5Dmp1VLxSrZpePtWbJWVZ92eopZdXWTPEpej55x7Fx0e4ZUgXvn5gJAO6tOGPn6/l+ldXsONgqbtDU0qdI03o3qxtT4jsYp2+1oCNBUeprjU6oYyHim8TzNs/H8T/uzqN9XuPkPXcIl5bvE3PYVeqFdKE7s1ErFr6tmyorL8f9fiAOE3onktEuDa9E/MeGMWwbjE88dV6rn5lGVv2H3V3aEqps6AJ3dsljYXqctixuN7VOXnFRAbrgDhvEBcRyGu3pvPc9f3YfrCU8c8t4cUFW6iqqXV3aEqpJtCE7u0ShoNfSIP96DpDnHcREa7o15F5D4xiTJ9Y/vb1Rq56aSnr9hxxd2hKqUZoQvd2vgHQLdPqR69zTnJ5VQ2b9h3V5nYv1DYsgBdvGsDLNw2goLicy19YwtPzNlFZrbV1pVoqTejK6kc/kg/7ck9ZvEEHxHm9cantmffAKC7r24Hn/7uZy/65hDV5Re4OSylVD03oCnpcYt3XaXY/PiBOT1nzbm1C/Hnmun68fms6RccqufLFpTw1ewPlVTr3k1ItiSZ0BWGx0GHAaaev5eYV00YHxCm7i3rHMveBUVyb3olXFm5l/POL+X5H3SskK6XcRRO6svQcB3nfQ8mBE4vW5BeTogPilIOIID+e+lka79w+iIqqWq7513L+9OVayiqr3R2aUl5PE7qyJI0FDGyZB1gD4jbvO6oXZFH1GtGjLXMfGMktQ7rw76U7yHp2Mcu2HnR3WEp5NU3oyhKXBmHtT/Sj64A41ZiQAF8euyKFDyYPwUfgxldX8ofPcjhaXuXu0JTySprQlUXEqqVv+QaqK8mxj2TWAXGqMYO7RjP7vpHcMSKR6d/uYuwzi8jeuN/dYSnldTShq5OSsqDyKOxaRk5+MVEh/nSM1AFxqnFB/jb+cGkfPr7zQoIDfJn07+948KOfKC7T2rpSrqIJXZ2UOAp8A2HjHNbk6YA4dfYGdG7DV/cOZ0pmNz5bnc/Fzyxk7toCd4ellFfQhK5O8g+GxJHUbpzN5v1HSe0Y7u6IVCsU4Gvjt2N78fmUYUSH+DP5nVXcM301hSUV7g5NKY+mCV2dKmksPkU7SDD5pHaMdHc0qhVL6RjBF3cP59djkpiTu5cxzyziy5/2YIxemlUpZ9CErk7VYywAo31Wk6qnrKnz5O/rw70X9WDmPSPo1CaIe6av5lfvrmL/kXJ3h6aUx9GErk4V2Yk9Ad0Y6/cjHSIC3R2N8hA948L45M4LmTquFws2HmDMM4v4ZFWe1taVakaa0NVpFjKA/mxAyvUiHKr5+Np8+NWobsy+bwTd24Xym49+4rY3v2NnYam7Q1PKI2hCV6cor6rhk5IUbNTClv+6Oxzlgbq1DeXDXw7lkcv6sHLbIUb9LZsrXlzKtEVbyTtc5u7wlGq1NKGrU6zbe4QfarpR6d/mtIu1KNVcbD7CbcMS+ebBUTyU1Yua2lr+PGsDw/+6gCteXMqri7ZpclfqLPm6OwDVsuTmF1OLD9XdLsZ/yzyoqQabfk2Uc7SPCOLOjG7cmdGNnYWlfJWzl1k5e3ly1nqenLWefp0iuTS1PeNS44hvE+zucJVq0fQ/tTrFmrxiokP8CUqZAOs/grzvoMtQd4elvECX6BDuyujOXRndz5jcx6e11xkMlaqHJnR1itz8YlLjI5Bug8HH17pYiyZ05WKOyX3HwVJm5e7lqzWnJvcJae0Zl6rJXanj3NKHLiIPiMhaEckVkekiEigiUSIyT0Q22+/buCM2b3assobN+0usK6wFhkOXYdqPrtwuIcZK7l/dO4LsBzP47dieVNXU8sRX6xn21Ddc9dJSXlu8jfyiY+4OVSm3cnlCF5GOwL1AujEmBbAB1wNTgf8aY3oA/7U/Vy60bu8RamrNySusJWXBgfVweIdb41LquISYEKZknprcK6s1uSsF7hvl7gsEiYgvEAzsAa4A3rKvfwu40k2xea3c/GIA0o7PEJdkzRrHprluikiphtWX3CuqTk/uezS5Ky/h8j50Y0y+iPwd2AUcA+YaY+aKSKwxZq99m70i0s7VsXm7NXnFxIT6ExdunyEuuhtE97D60QdPdm9wZ1J6kJCSHe6OQrnR8eQ+JbM72w+WMivH6nN/4qv1PPHVegZ0jmR8anvGp7ang/a5Kw8lrp560d43/glwHVAEfAR8DLxgjIl02O6wMea0fnQRmQxMBoiNjR04Y8YMl8TtTiUlJYSGhjr9df53SRlRgT78Ov3klK/dtvybjvkzWTrsHWp8W85pQ1JbQ5vDq2m/dz7Rhd/hY6rZ33YYm3tMpspfLyrTEFd9l1qKgtJaviuo5ruCGnYdrQWge6QPF8T5kh5rIzqo/kZKbyunc6Xl1DhnlFFmZuYqY0x63eXuGOV+MbDdGHMAQEQ+BS4E9olIe3vtvD2wv76djTHTgGkA6enpJiMjwzVRu1F2djbOfp/HKmvY8/UcJg5KJCOj58kVXWzw1n8Y0bEGejs3hiY5uBlWvws/zYCSAgiOgSG/YseegyTkfUq7HzfAuP8HKT8DvZb7aVzxXWpprrffO9bcp284wvQNNFhz98ZyOhdaTo1zZRm5I6HvAoaISDBWk/tFwPdAKXAr8JT9/nM3xOa11u0tptZwckDccZ2HQECE1eze+zL3BFdxFNZ+ZiXy3StBbFb/fv+bocclYPNjR3Y2CZfeD59PgU9uh9xPYcLTEBbnnphVi5NYT7P8zDrN8pemdWB8qn5nVOvUaEIXER9giDFmWXO8oDFmpYh8DPwAVAOrsWrcocCHInI7VtK/pjleTzVNTt7xAXF1mqttftD9ImtgXG0t+LhoHKUxsHOZlcTX/QeqyiCmJ4x5HNKug7DY0/dp1xtunwfLX4QFT8KLgyDrKeh7g9bW1Skck/u2AyVWzT2ngMdnruPxmevoEu7DxSXrGNI1mkEJUUQE+7k7ZKUa1WhCN8bUisg/gGabXcQY8wjwSJ3FFVi1deUGOflHiAkNIDY84PSVSVmw9lPYuxo6DnRuIMX58NP78OP7cGgb+IdB2rXQ72aIT288MfvYYNi90HM8fHE3/OdOq7Z+2bMQEe/c2FWr1LVtKHeP7sHdo3uw7UAJs3MLmPndZt5ZsZPXl2xHBJI7hDMkMZohXaO5IDGKiCBN8KrlaWqT+1wR+RnwqdELGHuknPwiUjuGI/UlzO4Xg/hYk8w4I6FXV8CGr6za+LYFYGohYQSMegh6Xw7+5zAYL6Y7TJoF370G8x+FF4fAJY/DwElaW1cN6to2lCmZ3UmWPIYMG8FPu4tYvq2QFdsKeXvFTl6rk+CHdosmPUETvGoZmprQfw2EADUicgwQwBhjwp0WmXKZsspqtuwvISulff0bhERD/CCrHz3z9833wnt/spJ4zkdw7DCEx8OIB6HfjRCVeP7H9/GxTrdLugS+uAdm3m+1NFz+T2iTcP7HVx4t0M/G4K7RDO4aDViXFv5xdxEr6iR4H4HkDhEM6Rp1ogYfHqgJXrlekxK6MSbM2YEo91m/9wi1BmvK14YkjYX//gmO7IHwDuf+YmWHYM2H8OO7UJADtgDoPcEa4JY4ymoyb25tEuB/voBVb8LcP8JLQ+HiR+GCO1w3JkC1eoF+NoZ0tZrdwUrwq3edTPBvLdvJq4utBJ/SMcK+bRTpCZrglWs0eZS7iFwOjLQ/zTbGzHROSMrV1tgHxJ0xofccZyX0zXOtZuuzUVsDW7+xauMbZ0FNJbTvB+P/DqlXQ5ALpu0XgfTboMcY+PI+mP07a+T8FS9aE+godZYC/WwM7WY1u8PpCf7NpTuYtmjbKQl+aNdo0hPaEKYJXjlBkxK6iDwFXAC8Z190n4gMN8bofOseICe/mLZhDQyIO65tL4jsbPWjNzWhF249ec740T0QFAUX/AL63QRxKc0S+1mLiIebPoafpsOcqfDyhTD6f2HIXc5pHVBeo74E/8Ouw6zYdui0BJ96ogavCV41n6bW0McD/YwxtQAi8hbW6Waa0D1Abn4xqR0j6h8Qd5yINdp99btQdQz8Gpg+s6LEOs1s9Xuwa5k1mK77GBj3V2t/X3/nvImzIWL103fNhK9+DXP/F9b+x6qtt+vl7uiUhwj0s3Fhtxgu7BYDOCT4rYWs2HaIN5Zu51+LtmHzEXsN3t4HnxBFaIBe2VqdvbP51kQCh+yPz9A2q1qTRgfEOUoaC99Ogx1LrKbr44yBXSusfvHcz6CqFKK7W/3UaddDeBOO7Q7h7eH69yH3E5j1W/iXfWT9sPus8++VakZ1E/yxyhpW7zpsb6I/xBtLtvOvhScT/FCHPnhN8Kopmvot+TOwWkQWYI1wHwk87LSolMus22MNiEs7U//5cV2Gg1+INdq9xxhrgNxP063a+KGt4B8KKROh/y3QaVDrOD1MxOrHTxwFs38L3zwO6z6HK1+CuFR3R6c8WJC/jQu7x3Bh95MJ/ocTCb6Q15ds45WFW7H5CKkdI8js2Y6slDiSYkPP3JqmvFZTZ4qrBYZg9aML8JAxpsDJsSkXODEgLr4JCd0vELplwrovoGgXbJlvnTPeZRiMfNA6ZzyglV6oIbQtXPMmJE+Er34D0zJgxG+s0+haQjeB8nhB/jaGdY9hWD0JfumWgzz73008M38TXWNCGJsSx7iUuMa7ypRXaepMcXcbYz4EvnBBTMqFcvOLaRcWQGx4YOMbA/SaABtmQkEuDP+11RftSaPE+1wOCcNhzsOw8K+w/kurb73jAHdHpryMY4L/zSU92X+0nLlr9/H12gKmLdrGy9lb6RgZxNjkOLJS4hjYpQ02H03u3qypTe7zRORB4AOsi6gAYIw51PAuqjXIsQ+Ia7K066wR6u36eO6o8OAomPgvSL7KmozmtYvgwnsh42GrlUIpN2gXFsjNQ7pw85AuFJVVMn/9fubk7uXdlTt5Y+l2YkIDuCQ5lnEpcQzpGo2fTedY8DZNTeg/t99PcVhmgK7NG45ypdKKarYcKGF86lkMWvPx8Z6+5Z5Z0HmFNQp+6bPW9LRXvAidB7s7MuXlIoP9uXpgPFcPjKekopoFG/YzZ20B/1mdz/srdxER5MfFvWPJSoljRI8YAv089Me3OkVT+9CnGmM+cEE8yoXW7T2CMZDWlP5zbxUUCVe8YA32++JeeGMsDLkTRv/x3OaYV6qZhQb4clnfDlzWtwPlVTUs3nyQ2bl7mbeugE9+yCPE30ZGr3aMS4kjo2c7HTHvwZrahz4Fq7ldeZCcpswQpyzdRsNdy60Lvax4CTbOtuaETxzh7siUOiHQz8aYPrGM6RNLVU0ty7cWMmdtAXPXFvDVmr34+/owskcMWSntubh3OyKDdcCnJ9E+dC+WYx8Q166pA+K8XUAYXPoPq2/987vhrQnWzHcXP2qtU6oF8bP5MDKpLSOT2vL4FSms2nmY2bl7+Tq3gPnr9+PrIwztFs3Y5DguSY6lXZj+H2jttA/di+XkF2tz+7lIGA53LoNvnrBq65u+hsueg+4XuTsypepl8xEGJUYxKDGK/5vQhzV5xcxZW8Cc3AL+9z+5/PHzXNK7tCErpT1jk2OJb6PdSa1RU6+21gzXslQtSWlFNVsPlDAhrYXO4tbS+QdD1p8h+Ur4fAq8a59Q55InrH53pVooEaFvp0j6dorkd2N7smlfCXNyC5idu5fHZ67j8ZnrSIuPYGyyda5717atdG4JL3TG8xpE5HcOj6+ps+7PzgpKOd/aPdaAOO0/P0+dBsEvF8PwB+DH9+ClIbBxjrujUqpJRISecWHcd3EP5tw/kuwHM5g6rhc+Ivzt642M/sdCLnlmIU/P28S6PUcwxrg7ZHUGjZ2oeL3D47pTvWY1cyzKhXLydUBcs/ELtPrRf/Ff61Kw06+DTydb135XqhVJiAnhV6O68Z8pw1g2dTSPXtaHNsH+vPDNZsY/v5iMv2fzl1nrWb3rMLW1mtxbmsaa3KWBx/U9V61Ibn4xseE6IK5ZdRwAkxfC4r/D4n9Y11tv2wvi0qxz9+NSrUl5AvVHlGr5OkQGMWlYIpOGJXKwpIJ56/YxJ7fgxFXi4sID6RFWzeGIPIZ2jSEuQv+XuFtjCd008Li+56oVWZNXRGpH7ettdr7+kPl76HMFrPkACnKsi9n8+O7Jbdok2JO7Q6IP79g6LmajvFJMaAA3DOrMDYM6U3ysim827GPu2n0s2ljA4g9+AiAxJoQhXa3rwQ/tGk3bsAA3R+19GkvofUXkCFZtPMj+GPtz/TnWSpVUVLPtYCmX9+3o7lA8V2wyjHnMemwMlOyzknvBGvt9DqyfyYnfxUFRDrV4e6KPSQKbTgKiWpaIID+u6h/PVf3j+WbBAmJ7DmD51kKWby1k5k97mP7tLgB6tAtlaLdoLuwWzeDEaNqE6DnvznbG/xbGGJ0v0AOtzS+2BsTFh7s7FO8gAmFx1s3xOvIVR2HfulOT/HevQXW5td4WAO16Q/u0k0k+NlnPeVctho8IyR0iSO4QwS9GdKW6ppa1e46wbGshy7cV8vGqPN5evhMR6BUXztCuVoIf1DWK8EA/d4fvcfTnvxc6PiAuRQfEuVdAmDUvvOPc8DXVULjFnuTXnKzJ//D2yW2iujrU5O2JPixOm+yV2/nafE6cEndnRjeqampZk1fEsi1Wgn/PfiEZH7H+/wy1N9FfkBBFiE5Je960BL1Qbn4xceGBOjNUS2TzhXa9rFvatdYyY+Do3lOb7PeugXWfn9wvOObUJvv2aRDd3XOviKdaBT+bDwO7RDGwSxT3ZHajvLyUnJ37+WFrATk79rFo6TqWLK4kxKeK3m39SYsLILldIF3b+OJvKqGq3Gqxqq6w39d97Pi8AmqqrB+3kZ1PvUV0ss5A8fAfvZrQvdCa/GKtnbcmIhDewboljT25vPwI7Ft7aqJf+QrUVFrrfYMgts8pid6/ohCO7LHWnzin2Dg8N2exjnPcr85zmx/4BYFfiP0+yOP/8Z6RMVZyqiqzbpX2+9pqqK0BU1Pnvvb056YGamvr2fYMy41p4vFPHqPPnt2wd9rpibX6WJ3n5VBTSSBwgf0GgGOre5H9tqGBchEf6zvtGwC+gdbpor6BDs+DwD8UDu+E7YugsuTU/f3DTk/0kZ0hshNEdvGIhO+WhC4ikcBrQArWX/fPgY1Yc8UnADuAa40xh90Rnycrqahm+8FSruynA+JavcBw6DLUuh1XUwUHN53sky9YA2v/A6veBOBCgOXuCPYs+QWfvPkHn5rw/R3W+QWBf8gZtj3+I8FxffD5tVwYY/1oqiy1J91jDo8dEnC9j0vt29fzuNJ+rKpSK4m6jVjlIzaHe586z6370Mpq8ImyJ9ZA65TMU5JsnaR74r7+5WXGj9x9FazaU8a3u8pYs6+ccuOH8Q2kf0KMvYk+hrT4iDNf790YOHYYinadvBXvPvl4xxKoPHrqPv6h9dfsIztbCT84qsUnfHfV0J8D5hhjrhYRfyAY+D3wX2PMUyIyFZgKPOSm+DzWiQFxWkP3TDY/a+BcbDL0tc8LZQwcyYe9a9j4wyJ6JvV0+Mdkv3d8ft7rOLv9aqsaToInkuUx63nZQSiqs231sXMop4AzJvyUA/tg59MNJ2hTc3av5+N36g+R44/9QyE0tp4fJ/X8UPHxazCxnrq8zuPTtq1vueM+TU9a32Znk5GRcXZlcQbBwKBEGATcCRSXVbFyu9X/vnxrIX+fuwnYRLC/jQsSok6Mok/uEIHNxyFuESsBB0dBh36nv5AxUF5kT/C7T038Rbtg5zKoOHLqPn4h9dTsOzsk/Gi3J3yXJ3QRCQdGApMAjDGVQKWIXAFk2Dd7C8hGE3qz0wFxXkgEIuIhIp69BcH0TM9wd0TNq7bWSuqnJH/H2u/xZOzww+BEcnbcttTqxjhaQGD5MQhuZyXVkHan1vxPS8yOLQchpybj49vadET3uYgI9uOS5DguSY4DoLCkgpXbD1mnyW0r5KnZVvt8WKAvg+0Xn2kbFkCIvy+hAb4EB/gSGmAjJMDXuvn7WolfxGpiD2oD7fvW/+LHik6t1Z+47YTdK6C8+NTt/YLrqdl3JuzIQagabH0vnMwdNfSuwAHg3yLSF1gF3AfEGmP2Ahhj9opIOzfE5vFy8otpHxGokz4oz+HjYyVQ/xAIiWmWQ37fzDVP1TyiQwMYn9qe8anWRaX2Hyln+bZCVthr8PPX72/0GIF+PoQ6JHgr8VtJP9TfWh4aYCM4wJeQgHBCA/oSEjaQ0Jg6PxBMGSHH9mA7JenvtO7zvrOa/IGBABcMbviHQzMSV0+2LyLpwApgmDFmpYg8BxwB7jHGRDpsd9gY06ae/ScDkwFiY2MHzpgxw0WRu09JSQmhoc1zxaOpi8toH+LDfQM8a4R7c5aRJ9Nyahotp6ZpaeV0tNJQWmWoqDGUV8OxakN5DZRXGyrs98eqobzGUF5tbXNiW/v98W2bmhn9bRBog0BfIdAmBPpaj9v4lNFRCmlXvZfE3ulEhDTfJWkzMzNXGWPS6y53Rw09D8gzxqy0P/8Yq798n4i0t9fO2wP1/tQyxkwDpgGkp6cbb/gVnd1MtYWj5VUUzJnLTRd2IyOjx/kH1oI0Vxl5Oi2nptFyahpPLSdjDMeqaiipqKa0oobSimrrVllNiePzihr7surTlu2uCGRDRTjFpR34Mn0EPWKdPyGUyxO6MaZARHaLSE9jzEbgImCd/XYr8JT9/vMzHEadg7V7rEEeKfHaf66UUg0REYL9fQn294XzzMPZ2dkuSebgvlHu9wDv2Ue4bwNuw7qU64cicjuwC7jmDPurc5CTp5dMVUopT+WWhG6M+RE4rf0fq7aunCQnv5gOEYHEhOqAOKWU8jRnODNfeZpcnSFOKaU8liZ0L3GkvIptB0u1uV0ppTyUJnQvsTbfGhCXqgPilFLKI2lC9xK5+TogTimlPJkmdC+xJr+YjpFBROuAOKWU8kia0L2ENSAu3N1hKKWUchJN6F7gSHkV23VAnFJKeTRN6F7gRP95fGQjWyqllGqtNKF7AR0Qp5RSnk8TuhfIyT9Cx8ggokL83R2KUkopJ9GE7gVy8oq0dq6UUh5OE7qHKz5WxY7CMp1QRimlPJwmdA+31t5/rnO4K6WUZ9OE7uFydECcUkp5BU3oHi7HPkOcDohTSinPpgndw+XkF5Om/edKKeXxNKF7sOJjVewsLNP+c6WU8gKa0D3YWu0/V0opr6EJ3YOt0YSulFJeQxO6B8vJLya+TRBtdECcUkp5PE3oHiw3v1hr50op5SU0oXuo4jJrQJzOEKeUUt5BE7qHyt2j/edKKeVNNKF7qOMzxKV00ISulFLeQBO6h8rJK6ZTlA6IU0opb+G2hC4iNhFZLSIz7c+jRGSeiGy237dxV2yeIEcHxCmllFdxZw39PmC9w/OpwH+NMT2A/9qfq3NQVFbJrkNlpHaMdHcoSimlXMQtCV1E4oFLgdccFl8BvGV//BZwpavj8hS5+UcAHRCnlFLexF019GeB3wG1DstijTF7Aez37dwRmCc4MSCuY7ibI1FKKeUqYoxx7QuKTADGG2PuEpEM4EFjzAQRKTLGRDpsd9gYc1o/uohMBiYDxMbGDpwxY4arQnebkpISQkNDm7z9C6vL2Xmklr+NCnZiVC3L2ZaRt9Jyahotp6bRcmqcM8ooMzNzlTEmve5y32Z9laYZBlwuIuOBQCBcRN4F9olIe2PMXhFpD+yvb2djzDRgGkB6errJyMhwUdjuk52dzdm8zz9++w2DukeSkTHAeUG1MGdbRt5Ky6lptJyaRsupca4sI5c3uRtjHjbGxBtjEoDrgW+MkmreOgAAD6VJREFUMTcDXwC32je7Ffjc1bF5gqKySnYfOqaXTFVKKS/Tks5DfwoYIyKbgTH25+osHe8/T9MpX5VSyqu4o8n9BGNMNpBtf1wIXOTOeDyBzhCnlFLeqSXV0FUzyM0vpnNUMBHBfu4ORSmllAtpQvcwa/KK9QprSinlhTShe5DDpZXkHT6mE8oopZQX0oTuQY5fMjVNE7pSSnkdTegeZE2eldCTNaErpZTX0YTuQXLzi+kSHUxEkA6IU0opb6MJ3YOsydNLpiqllLfShO4hDpdWkl+kA+KUUspbaUL3EMcnlNGErpRS3kkTuoc4ntB1QJxSSnknTegeIievmAQdEKeUUl5LE7qHyMkv1iusKaWUF9OE7gEO2QfE6RXWlFLKe2lC9wAnrrCmNXSllPJamtA9QK4mdKWU8nqa0D3AmrwiEmNCCA/UAXFKKeWtNKF7gNz8I1o7V0opL6cJvZUrLKmwBsRpQldKKa+mCb2V0wFxSimlQBN6q5d7Yoa4cDdHopRSyp00obdya/KK6aoD4pRSyutpQm/lcnWGOKWUUmhCb9UOllSwp7hcr7CmlFJKE3prduKSqTrlq1JKeT1N6K1Ybp59QFwHHRCnlFLezuUJXUQ6icgCkf/f3v0HWVXedxx/f/ilwKqECjsErPiriVRNrRtran4sETumscFpdUZrEjKxpWlNYhzTVJq0Q9MmY2qTsTNJmhJjJAmGscaKWhtl0NXaVEEpsqtooAnVXRFwKrtshIV1v/3jPCuXu/fuXs3unnMvn9fMzp7znF/f81x2v/uc8/A82iLpaUnXpPKZktZK2pq+v2W8Y6s37V3dnDxrOse4Q5yZ2REvjxZ6P3BdRJwOnAdcLWkBcD2wLiJOA9aldRtGe1e335+bmRmQQ0KPiB0RsTEt7wW2AHOBxcDKtNtK4JLxjq2evNzbxw53iDMzsyTXd+iS5gNnA48DzRGxA7KkD8zOL7Lie71DnBO6mZkBioh8Liw1AQ8DX4qIOyXtiYgZJdtfiYgh79ElLQWWAjQ3N5+zevXqcYs5L729vTQ1NR1WtmbbAe7adpBvLprG1EnKKbLiqFRHNpTrqTaup9q4nkY2FnW0cOHCJyOipbx80qhepUaSJgM/AlZFxJ2peKekORGxQ9IcYFelYyNiBbACoKWlJVpbW8cj5Fy1tbVRfp+rnn+Ck2b18oFFrRWPOdJUqiMbyvVUG9dTbVxPIxvPOsqjl7uA7wBbIuJrJZvuBpak5SXAmvGOrZ60d3Z7hjUzM3tdHi3084GPAO2SNqWyvwRuAG6XdBXwPHBZDrHVhd17+3ipZ7+HfDUzs9eNe0KPiEeBai99LxjPWOpVhzvEmZlZGY8UV4c2d3Yjwa87oZuZWeKEXofau7IpU5uOyqVPo5mZFZATeh3q6OrmrHkzRt7RzMyOGE7odWbX3v3uEGdmZkM4odcZd4gzM7NKnNDrTHtnT9YhzlOmmplZCSf0OtPetYdTZjUx3R3izMyshBN6nfGUqWZmVokTeh3Z1bOfnT19TuhmZjaEE3odeX3K1HlO6GZmdjgn9DrS3pWNELdgjjvEmZnZ4ZzQ60h7ZzenukOcmZlV4IReR9whzszMqnFCrxM7e/aza2+f35+bmVlFTuh1or3TI8SZmVl1Tuh1or2rmwmCBR4hzszMKnBCrxMdXd2cOruJaVPcIc7MzIZyQq8Tm7u6PcOamZlV5YReB17ZP8DuvR4hzszMqnNCrwPbewYAOMs93M3MrAon9DqwvXsg6xA3xwndzMwqc0KvA9t7Bjh1dhNTp0zMOxQzMysoJ/SCiwi29wxw5twZeYdiZmYF5oRecDt7+ujuC86c6/9/bmZm1TmhF9yhKVPdQjczs+qc0AuuvXMPwlOmmpnZ8AqX0CVdJOk5SdskXZ93PHlr7+pmbpPcIc7MzIZVqIQuaSLwDeADwALgCkkL8o0qPxFBe1cP849zMjczs+EVbWDwc4FtEfEzAEmrgcXAM2N94VcP9PPo1pcJICJLpoPLA68vR7aNYGCAIWXZvoeWh5wjhh4zEIe2k7YNlvX1v8bLvX3MP2HKWN++mZnVuaIl9LnACyXrncBvle4gaSmwFKC5uZm2trZRufCuVwf43CP7RuVco2nKRDhxat+o3Wej6u3tdR3VwPVUG9dTbVxPIxvPOipaQleFsjhsJWIFsAKgpaUlWltbR+XCff2vseAdvQBMkJBASsuABstKt3NoP0lMKC9Ly4PnmJBOcPh5UzlDrzchnbetrY3Rus9G5TqqjeupNq6n2rieRjaedVS0hN4JnFCyPg94cTwufNSkiZ7NzMzM6lahOsUBG4DTJJ0kaQpwOXB3zjGZmZkVXqFa6BHRL+mTwP3AROCWiHg657DMzMwKr1AJHSAi7gPuyzsOMzOzelK0R+5mZmb2Jjihm5mZNQAndDMzswbghG5mZtYAnNDNzMwagBO6mZlZA3BCNzMzawCKiJH3KihJu4H/zTuOcXA88HLeQRSc66g2rqfauJ5q43oa2VjU0YkRMau8sK4T+pFC0hMR0ZJ3HEXmOqqN66k2rqfauJ5GNp515EfuZmZmDcAJ3czMrAE4odeHFXkHUAdcR7VxPdXG9VQb19PIxq2O/A7dzMysAbiFbmZm1gCc0AtK0gmSHpK0RdLTkq7JO6YikzRR0n9LujfvWIpK0gxJd0h6Nv27elfeMRWNpGvTz1uHpB9KOjrvmIpA0i2SdknqKCmbKWmtpK3p+1vyjLEIqtTTjelnbrOkf5U0Y6yu74ReXP3AdRFxOnAecLWkBTnHVGTXAFvyDqLg/hH4cUS8HXgHrq/DSJoLfBpoiYgzgInA5flGVRi3AheVlV0PrIuI04B1af1IdytD62ktcEZEnAX8FFg2Vhd3Qi+oiNgRERvT8l6yX75z842qmCTNAz4I3Jx3LEUl6VjgvcB3ACLiQETsyTeqQpoETJU0CZgGvJhzPIUQEY8A/1dWvBhYmZZXApeMa1AFVKmeIuKBiOhPq48B88bq+k7odUDSfOBs4PF8Iymsm4DPAQN5B1JgJwO7ge+mVxM3S5qed1BFEhFdwD8AzwM7gO6IeCDfqAqtOSJ2QNYAAWbnHE89+Djw72N1cif0gpPUBPwI+ExE9OQdT9FIuhjYFRFP5h1LwU0CfhP4p4g4G/gFfkR6mPQOeDFwEvBWYLqkD+cblTUKSZ8ne5W6aqyu4YReYJImkyXzVRFxZ97xFNT5wIckbQdWA++X9IN8QyqkTqAzIgaf8txBluDtkEXAzyNid0QcBO4EfjvnmIpsp6Q5AOn7rpzjKSxJS4CLgStjDP+vuBN6QUkS2fvOLRHxtbzjKaqIWBYR8yJiPlkHpgcjwq2qMhHxEvCCpLeloguAZ3IMqYieB86TNC39/F2AOw4O525gSVpeAqzJMZbCknQR8BfAhyLi1bG8lhN6cZ0PfISsxbkpff1u3kFZXfsUsErSZuA3gC/nHE+hpKcXdwAbgXay348eCQ2Q9EPgv4C3SeqUdBVwA3ChpK3AhWn9iFalnr4OHAOsTb/HvzVm1/dIcWZmZvXPLXQzM7MG4IRuZmbWAJzQzczMGoATupmZWQNwQjczM2sATuhmFUgKSV8tWf+spOWjdO5bJV06Guca4TqXpVnVHiorny/pD9/kOX9Swz43N9JEQqm+Okbe0yxfTuhmlfUBvy/p+LwDKSVp4hvY/SrgzyJiYVn5fKBiQk+TklQVESOOnBYRfxQRHrTGbJw5oZtV1k82qMi15RvKW9iSetP3VkkPS7pd0k8l3SDpSknrJbVLOqXkNIsk/Ufa7+J0/MQ0d/KGNHfyn5Sc9yFJt5ENeFIezxXp/B2SvpLK/hp4N/AtSTeWHXID8J40yMW1kj4m6V8k3QM8IKlJ0jpJG9N5F1e517aS+dVXpdHVSOUtg/tL+pKkpyQ9Jqk5lZ+S1jdI+uLgeSvc24dT/W2S9M+pjt6Z6udoSdOVzV9+RrW4Uwv72fTkoCPFukjSfyqby/vctN9ySd+X9GAq/+MK8VT7jOZIeiTF2SHpPZXux2xMRYS//OWvsi+gFzgW2A4cB3wWWJ623QpcWrpv+t4K7AHmAEcBXcDfpG3XADeVHP9jsj+oTyMbZ/1oYCnwhbTPUcATZBOFtJJNpnJShTjfSjZk6SyyCVgeBC5J29rI5vYuP6YVuLdk/WMphplpfRJwbFo+HtjGoUGoSu+1m2wqyAlko2O9u/y6QAC/l5b/vuT+7gWuSMufGDxvWZynA/cAk9P6N4GPpuW/I5sZ7RvAsuHiJnsi0Q+cmWJ9ErglbVsM3JWOWQ48BUxNx7+Q6nc+0JH2qfYZXQd8PpVPBI7J+9+wv468r2Efr5kdySKiR9L3gE8D+2o8bEOkKSUl/Q8wOP1mO1D66Pv2iBgAtkr6GfB24HeAs0pa/8eRJfwDwPqI+HmF670TaIuI3emaq8jmPb+rxngHrY2IwXmcBXxZ0nvJpqSdCzQDL5Udsz4iOtN1N5ElvkfL9jlAlrwhS6QXpuV3cWj+7NvIknO5C4BzgA2p8T+VQxOAfBHYAOwn+3yGixuySVfaU6xPA+siIiS1p7gHrYmIfcC+1PfgXGBTyfZqn9EG4BZlEyrdFRGlx5iNCyd0s+HdRDa293dLyvpJr6vSY+YpJdv6SpYHStYHOPznrXzM5SBLSJ+KiPtLN0hqJWuhV6IR76A2pee/kqzFf05EHFQ2k93RFY4pvdfXqPz75GBExAj7VCNgZUQsq7BtJtAETE6x/WKEuH+Zz6U8piGfEUD6Q+KDwPcl3RgR3xv+9sxGl9+hmw0jtVpvJ+tgNmg7WcsRske2k9/EqS+TNCG9Vz8ZeA64H/jT1MpD0q9Jmj7CeR4H3ifpeGUd5q4AHh7hmL1kk0VUcxzZHPMHJS0ETqzhft6ox4A/SMuXV9lnHXCppNkAkmZKGoxlBfBXZHNLf2UU416c3s3/CtlrhQ1l2yt+RimuXRHxbbJZEj01rY07t9DNRvZV4JMl698G1khaT5Z0qrWeh/McWeJtBj4REfsl3Uz2+Hdjavnv5tBj6YoiYoekZcBDZK3H+yJipGksNwP9kp4ie5//Stn2VcA9kp4ge9z87Bu5sRp9BviBpOuAfyN7H3+YiHhG0hfIOupNAA4CV0t6H9AfEbelP2J+Iun9oxT3+hTPrwJ/GxEvSppfsr3aZ9QK/Lmkg2T9Lz76Jq5t9kvxbGtmNu4kTQP2pffYl5N1kFs80nFjHNNyss55ld7nmxWeW+hmlodzgK+nVu4e4OM5x2NW99xCNzMzawDuFGdmZtYAnNDNzMwagBO6mZlZA3BCNzMzawBO6GZmZg3ACd3MzKwB/D9UxCfYVvi93wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_fit(train_means, train_stds, 100)\n",
    "plot_learning_curve(X_norm, y, Xval_norm, yval, 100)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用交叉验证集选择λ"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe4AAAE9CAYAAADNvYHXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXxV9Z3/8dc3C0lIIBACARJCFvZ9iawCQVxQEVyr2FZ/tnVptbUztVaddmS6Tcdp63SmMwWXKs6oaLVWEK0rCSDKpig7mEsIIawJ2fd7v78/zmVT0ECWk5vzfj4eeST33JtzPvlmeed7zvd8v8Zai4iIiISGMLcLEBERkaZTcIuIiIQQBbeIiEgIUXCLiIiEEAW3iIhICFFwi4iIhJAItwtoisTERJuWltZi+6uqqiI2NrbF9udFasOWoXZsPrVh86kNm6+l23Djxo1HrbU9z/RcSAR3WloaGzZsaLH95eTkkJ2d3WL78yK1YctQOzaf2rD51IbN19JtaIzZe7bndKpcREQkhCi4RUREQoiCW0REJISExDVuERE5qaGhgcLCQmpra1tkf/Hx8Wzfvr1F9uVV59uG0dHRpKSkEBkZ2eTPUXCLiISYwsJCunTpQlpaGsaYZu+voqKCLl26tEBl3nU+bWitpbi4mMLCQtLT05v8eTpVLiISYmpra+nRo0eLhLa4xxhDjx49zvnMiYJbRCQEKbQ7hvP5Piq4RUTknBQXFzNmzBjGjBlD7969SU5OPvG4vr7+Sz93w4YN/OAHP2ijSjsmXeMWEZFz0qNHDzZt2gTAggULiIuL47777jvxfGNjIxERZ46XrKwssrKy2qTOjsp7Pe79H9Gn6C23qxAR6VD+3//7f/zjP/4jM2fO5Cc/+Qnr1q1jypQpjB07lilTprBz507AmWFszpw5gBP63/rWt8jOziYjI4P//M//dPNLCBne63HvfJ1Bu/4E/NrtSkREOpRdu3bxzjvvEB4eTnl5OStXriQiIoJ33nmHhx56iJdffvkLn7Njxw5WrFhBRUUFgwcP5rvf/e453RrlRd4LbhGRDuRflm1lW1F5s/bh9/sJDw8/8XhY3648fNXwc97PDTfccGI/ZWVl3HrrrezevRtjDA0NDWf8nCuvvJKoqCiioqLo1asXhw4dIiUl5fy+EI/w3qlyAKzbBYiIdDinro71s5/9jJkzZ7JlyxaWLVt21lueoqKiTnwcHh5OY2Njq9cZ6jzY49YtFCLScZxPz/jzWmMClrKyMpKTkwF4+umnW3TfXufJHrdRj1tEpFXdf//9PPjgg0ydOhW/3+92OR2K93rcmrRARKTFLFiw4IzbJ0+ezK5du048/sUvfgFAdnb2iXWrP/+5W7ZsaY0SOxxP9rhFRERClYJbREQkhHgwuHWqXEREQpcHg1tERCR0eTe4rUaWi4hI6PFecGtUuYiIhDDvBfdx6nGLiJy3gwcPctNNN5GZmcmwYcO44oorTrv9qzU8/fTTzJ8//7RtR48epWfPntTV1Z31c+655x4AFi5cyDPPPPOF1+Tn5zNixIgvPXZ+fj7PPffcicduLk/qweBWj1tEpDmstVxzzTVkZ2eTl5fHtm3b+PWvf82hQ4dOe11LT7xy7bXX8vbbb1NdXX1i20svvcTcuXNPmzr1bO666y5uueWW8zr254M7KyvLtdXMPBjcIiLSHCtWrCAyMpK77rrrxLYxY8Ywbdo0cnJymDlzJjfffDMjR46ktraW2267jZEjRzJ27FhWrFgBwNatW5kwYQJjxoxh1KhR7N69m6qqKq688kpGjx7NiBEjeOGFF047bteuXZk+fTrLli07sW3JkiXMnz+fZcuWMXHiRMaOHcvFF1/8hX8iwJnw5be//S0AGzduZPTo0UyePJn//u//PvGa/Px8pk2bxrhx4xg3bhxr1qwB4IEHHmDVqlWMGTOGRx999LTlSUtKSpg/fz6jRo1i0qRJfPrppyeO1xrLlnpv5rQTdKpcROR8bNmyhfHjx5/1+XXr1rFlyxbS09P53e9+B8DmzZvZsWMHl156Kbt27WLhwoXce++9fP3rX6e+vh6/38/rr79O3759Wb58OeDMd/558+fP57nnnuPGG2+kqKiIXbt2MXPmTMrLy/nwww8xxvDEE0/wyCOPnDj2mdx2223813/9FzNmzODHP/7xie29evXi7bffJjo6mt27dzN//nw2bNjAb37zG37729/y2muvAc664sc9/PDDjBo1itdee4333nuPW265hU2bNgGts2yp94Jbg9NEpCN54wE4uLlZu4jxN0L4KXHQeyRc/pvz3t+ECRNIT08HYPXq1Xz/+98HYMiQIfTv359du3YxefJkfvWrX1FYWMi1117LwIED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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "lambdas = [0., 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1., 3., 10.]\n",
    "errors_train, errors_val = [], []\n",
    "for l in lambdas:\n",
    "    theta = trainLinearReg(X_norm, y, l)\n",
    "    errors_train.append(costReg(theta,X_norm,y,0))  # 记得把lambda = 0\n",
    "    errors_val.append(costReg(theta,Xval_norm,yval,0))\n",
    "    \n",
    "plt.figure(figsize=(8,5))\n",
    "plt.plot(lambdas,errors_train,label='Train')\n",
    "plt.plot(lambdas,errors_val,label='Cross Validation')\n",
    "plt.legend()\n",
    "plt.xlabel('lambda')\n",
    "plt.ylabel('Error')\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.0"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 可以看到时交叉验证代价函数最小的是 lambda = 3\n",
    "lambdas[np.argmin(errors_val)]  # 3.0"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
